import dotenv from 'dotenv';
import { createCrawl, createCrawlOpenAI } from 'x-crawl'; // 此处需替换为实际的爬虫库导入

// 加载.env 文件中的环境变量
dotenv.config();

// 使用 createCrawl 函数创建一个爬虫实例，并设置最大重试次数为 3，爬取间隔时间在 1000 到 2000 毫秒之间
const cralwApp = createCrawl({
    maxRetry: 3,
    intervalTime: {
        max: 2000,
        min: 1000
    }
})

// 使用 createCrawlOpenAI 函数创建一个 OpenAI 爬虫实例，并设置 API 密钥和基础 URL
const crawlOpenAIApp = createCrawlOpenAI({
    clientOptions: {
        apiKey: process.env.OPENAI_API_KEY,
        baseURL: process.env.OPENAI_BASE_URL
    },
    defaultModel: {
        chatModel: 'gpt-4-turbo-preview'
    }
})

// 使用爬虫实例爬取豆瓣电影排行榜页面
async function crawlDataFromWeb(url,prompt) {
    try {
        const res = await cralwApp.crawlPage(url);
        // 从响应中获取页面和浏览器对象
        const {
            page,
            browser
        } = res.data;
        // 定义要抓取的目标元素的选择器
        const targetSelector = '.indent';
        // 等待目标元素加载完成
        await page.waitForSelector(targetSelector);
        // 获取目标元素的 HTML 内容
        const highlyHTML = await page.$eval(
            targetSelector,
            (el) => el.innerHTML
        )
        // 使用 OpenAI 爬虫实例解析获取到的 HTML 内容，提取图片链接、电影名称、电影评分和电影简介，并将结果输出为 JSON 数组格式
        const result = await crawlOpenAIApp.parseElements(
            highlyHTML,
            prompt
        )
        // 关闭浏览器
        browser.close();
        return result.elements;
    } catch (err) {
        console.error('爬取数据出错：', err);
        return [];
    }
}

export default  {
    crawlDataFromWeb
};